﻿//////////////////////////////////////////////////////////////////////////////// 
// ПРОЦЕДУРЫ И ФУНКЦИИ 
//
// Модуль содержит процедуры и функции, предназначенные для работы с торговым оборудованием

// Начинает подключение к сканеру штрихкодов
//
// Параметры: 
//  ОписаниеЗавершение - описание оповещения, которое будет вызвано при завершении операции
//
// Возвращаемое значение:
//  Нет
Процедура НачатьПодключениеСканераШтрихкодов() Экспорт
	ВыполнитьПодключениеДрайвераСканераШтрихкодов();
КонецПроцедуры

&НаКлиенте
Асинх Процедура ВыполнитьПодключениеДрайвераСканераШтрихкодов()
	// Подключение внешней компоненты сканера
	Если ДрайверСканераШтрихкодов = Неопределено Тогда
		РезультатПодключения = Ждать ПодключитьВнешнююКомпонентуАсинх("ОбщийМакет.ДрайверСканераШтрихкодов", "Сканер");
	Иначе
		РезультатПодключения = Истина;
	КонецЕсли;
	Если РезультатПодключения = Ложь Тогда 
		Ждать ПредупреждениеАсинх(НСтр("ru='Драйвер сканера штрих-кодов не подключен'", "ru"));
		Возврат;
	КонецЕсли;
	ТипОС = ПолучитьТипОС();
	ПараметрыСканера = РаботаСХранилищемОбщихНастроек.ЗагрузитьПараметрыПодключенияСканера(ТипОС);
	Если ПараметрыСканера = Неопределено Тогда
		Ждать ПредупреждениеАсинх(НСтр("ru='Не определены параметры сканера'", "ru"));
		Возврат;
	КонецЕсли;
	ДрайверСканераШтрихкодов = Новый ("AddIn.Сканер.BarcodeReader");
	// Устанавливаем свойство БитДанных
	Ждать ДрайверСканераШтрихкодов.УстановитьБитДанныхАсинх(ПараметрыСканера.БитДанных);
	// Устанавливаем свойство Порт
	Ждать ДрайверСканераШтрихкодов.УстановитьПортАсинх(ПараметрыСканера.Порт);
	// Устанавливаем свойство Скорость
	Ждать ДрайверСканераШтрихкодов.УстановитьСкоростьАсинх(ПараметрыСканера.Скорость);
	// Устанавливаем свойство ИмяСобытия
	Ждать ДрайверСканераШтрихкодов.УстановитьИмяСобытияАсинх("СканерШтрихкода");
	// Проверяем занятость устрйоства
	УстройствоЗанято = Ждать ДрайверСканераШтрихкодов.ПолучитьУстройствоЗанятоАсинх();
	Если УстройствоЗанято = Истина Тогда
		Ждать ПредупреждениеАсинх(НСтр("ru='Устройство сканера занято'", "ru"));
		Возврат;
	Иначе
		Попытка
			Ждать ДрайверСканераШтрихкодов.ЗанятьАсинх();
			Ждать ПредупреждениеАсинх(НСтр("ru='Сканер штрих-кодов подключен'", "ru"));
		Исключение
			Ждать ПредупреждениеАсинх(НСтр("ru='Ошибка при попытке занять устройство'", "ru"));
		КонецПопытки;
	КонецЕсли;
КонецПроцедуры

// Отключение от сканера штрихкодов
// Параметры: 
Процедура НачатьОтключениеСканераШтрихкодов(ОповещениеЗавершение) Экспорт
	Если ДрайверСканераШтрихкодов <> Неопределено Тогда
		ВыполнитьОтключениеСканераШтрихкодов();
	КонецЕсли
КонецПроцедуры

&НаКлиенте
Асинх Процедура ВыполнитьОтключениеСканераШтрихкодов()
	Ждать ДрайверСканераШтрихкодов.ОтсоединитьАсинх();
КонецПроцедуры

// Возвращает тип операционной системы
// 
// Параметры: 
//  Нет
// 
// Возвращаемое значение: 
//  Строка 'Windows' или 'Linux'
Функция ПолучитьТипОС()
	
	ИнформацияОСистеме = Новый СистемнаяИнформация;
	
	Если ИнформацияОСистеме.ТипПлатформы = ТипПлатформы.Windows_x86 ИЛИ ИнформацияОСистеме.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда
		
		ТипОС = "Windows";
		
	ИначеЕсли ИнформацияОСистеме.ТипПлатформы = ТипПлатформы.Linux_x86 ИЛИ ИнформацияОСистеме.ТипПлатформы = ТипПлатформы.Linux_x86_64 Тогда
		
		ТипОС = "Linux";
		
	КонецЕсли;
	
	Возврат ТипОС;
	
КонецФункции
